package com.zzj.until;

import org.junit.Test;

import java.text.ParseException;
import java.text.SimpleDateFormat;
import java.util.Date;
import java.util.Locale;

/**
 * <p>
 * Title: 时间和日期的工具类
 * </p>
 * <p>
 * Description: DateUtil类包含了标准的时间和日期格式，以及这些格式在字符串及日期之间转换的方法
 * </p>
 * 
 * @author 郑子建
 *
 */
public class DateTool {
	public static String DATETIME_FORMAT_12 = "yyyy-MM-dd hh:mm:ss";
	public static String DATETIME_FORMAT_24 = "yyyy-MM-dd HH:mm:ss";
	public static String DATE_FORMAT = "yyyy-MM-dd";
	/**
	 * 年月日 星期几
	 */
	public static String DATE_WEEK_FORMAT = "yyyy年M月d日 EEEE";
	public static String TIME12_FORMAT_12 = "hh:mm:ss";
	public static String TIME24_FORMAT_24 = "HH:mm:ss";

	/**
	 * 时间转字符串,按默认转
	 * 
	 * @param aDate
	 * @return
	 */
	public static String date2Str(Date aDate) {
		SimpleDateFormat df = null;
		String returnValue = "";
		if (aDate != null) {
			df = new SimpleDateFormat(DateTool.DATETIME_FORMAT_24, Locale.CHINA);
			returnValue = df.format(aDate);
		}
		return (returnValue);
	}

	/**
	 * 时间转字符串，给定格式 <b>date2Str(new Date(),DateTool.DATETIME_FORMAT_24)<b>
	 * 
	 * @param aDate
	 * @param format
	 * @return
	 */
	public static String date2Str(Date aDate, String format) {
		SimpleDateFormat df = null;
		String returnValue = "";
		if (aDate != null) {
			df = new SimpleDateFormat(format, Locale.CHINA);
			returnValue = df.format(aDate);
		}
		return (returnValue);
	}

	/**
	 * 字符串转时间，给定格式 <b>str2Date("2016-10-12",DateTool.DATE_FORMAT)</b>
	 * 
	 * @param strDate
	 * @param format
	 * @return 错误时返回 null
	 */
	public static Date str2Date(String strDate, String format) {
		SimpleDateFormat df = null;
		Date date = null;
		df = new SimpleDateFormat(format, Locale.CHINA);
		try {
			date = df.parse(strDate);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return date;
	}

	/**
	 * 字符串转时间，默认 yyyy-MM-dd hh:mm:ss
	 * 
	 * str2Date("2016-10-12 10:10:10")
	 * 
	 * @param strDate
	 * @return 错误时返回 null
	 */
	public static Date str2Date(String strDate) {
		SimpleDateFormat df = null;
		Date date = null;
		df = new SimpleDateFormat(DATETIME_FORMAT_24, Locale.CHINA);
		try {
			date = df.parse(strDate);
		} catch (ParseException e) {
			// TODO Auto-generated catch block
			e.printStackTrace();
		}
		return date;
	}

	/**
	 * 获取当前年月日，并返回字符串
	 * 
	 * @return
	 */
	public static String getNowDateTime() {
		return date2Str(new Date());
	}

	/**
	 * 获取当前日期，并返回字符串
	 * 
	 * @return
	 */
	public static String getNowDate() {
		date2Str(new Date(), DATE_FORMAT);
		return date2Str(new Date());
	}

	/**
	 * 获取当前时间，并返回字符串 24小时制
	 * 
	 * @return
	 */
	public static String getNowTime() {
		date2Str(new Date(), TIME24_FORMAT_24);
		return date2Str(new Date());
	}

	/**
	 * 获取开始时间和结束时间之间的天数
	 * 
	 * @param datebegin
	 * @param dateend
	 * @return
	 */
	public static long getDisDays(String datebegin, String dateend) {
		SimpleDateFormat sdf = new SimpleDateFormat("yyyy-MM-dd", Locale.CHINA);
		try {
			Date dateBegin = sdf.parse(datebegin);
			Date dateEnd = sdf.parse(dateend);
			return (dateEnd.getTime() - dateBegin.getTime()) / (3600 * 24 * 1000) + 1;
		} catch (Exception e) {
			return 0;
		}
	}

	/**
	 * 获取开始时间和结束时间之间的天数
	 *
	 * @param datebegin
	 * @param dateend
	 * @return
	 */
	public static long getDisDays(Date datebegin, Date dateend) {
		try {
			return (dateend.getTime() - datebegin.getTime()) / (3600 * 24 * 1000) + 1;
		} catch (Exception e) {
			return 0;
		}
	}

	@Test
	public  void main(String[] args) {
		// System.out.println(date2Str(new Date(),DateTool.DATETIME_FORMAT_24));
		// System.out.println(str2Date("2016-10-12
		// 10:10:10",DateTool.DATE_FORMAT));
		// System.out.println(getNowTime());
		// System.out.println(getDisDays("2016-10-12 12:12:12","2016-10-14"));
	}
}
